#ifndef __LINKBASE_H__
#define __LINKBASE_H__

#include <functional>
#include "hv/Buffer.h"
#include <map>


/*
    实现一个 连接接口 LinkBase, 用于管理数据通道
    功能：
        1）设备的打开，关闭，发送，接收
           open 的入参使用 map 的形式
        2）事件包括： 
              连接，断开，发送数据，接收数据
        3）数据的接收通过事件实现，内置 线程 用于 监听
        4）数据打印，可以设置为 hex 或者 ascii
        5) 其他管理接口
*/


namespace controller
{
    typedef hv::Buffer LinkBuffer;

    class LinkBase
    {
    private:
        bool is_hex = false;

    public:
        // 读写接口
        virtual bool open(std::map<std::string, std::string>) = 0;
        virtual bool close() = 0;
        virtual int write(char *data, int len, const char *arg = NULL) = 0;
        // virtual int read(char *dataout, int len) = 0;

        // 状态
        virtual bool is_open() = 0;     // 设备是否打开
        virtual std::string name() = 0; // 设备名称
        virtual std::string info() = 0; // 设备信息

        // 事件支持
        std::function<void(LinkBase *link)> OnLinkConnect;                                // 连接
        std::function<void(LinkBase *link)> OnLinkDisconnect;                             // 断开
        std::function<void(LinkBase *link, LinkBuffer *buf, const char *arg)> OnLinkRecv; // 接收数据
        std::function<void(LinkBase *link, LinkBuffer *buf, const char *arg)> OnLinkSend; // 发送数据

        // 公共函数
        void set_dump_buffer_type(bool _hex); // 默认显示为 ascii
        std::string dump_buffer(LinkBuffer *buf);
    };
};
#endif